// 导入用户模型和必要的模块
const userModel = require('../models/userModel');
const jwt = require('jsonwebtoken');
const dotenv = require('dotenv');

dotenv.config();
const JWT_SECRET = process.env.JWT_SECRET || 'default_secret_key';
const JWT_EXPIRES_IN = '24h'; // JWT令牌有效期

// 用户控制器类
class UserController {
  // 用户注册
  async register(req, res) {
    try {
      const { username, password, email } = req.body;

      // 验证输入
      if (!username || !password) {
        return res.status(400).json({
          message: '用户名和密码是必填项'
        });
      }

      if (password.length < 6) {
        return res.status(400).json({
          message: '密码长度至少为6位'
        });
      }

      // 创建新用户
      const newUser = await userModel.createUser({
        username,
        password,
        email
      });

      return res.status(201).json({
        message: '用户注册成功',
        user: newUser
      });
    } catch (error) {
      return res.status(400).json({
        message: error.message
      });
    }
  }

  // 用户登录
  async login(req, res) {
    try {
      const { username, password } = req.body;

      // 验证输入
      if (!username || !password) {
        return res.status(400).json({
          message: '用户名和密码是必填项'
        });
      }

      // 验证用户密码
      const user = await userModel.verifyPassword(username, password);
      
      if (!user) {
        return res.status(401).json({
          message: '用户名或密码错误'
        });
      }

      // 生成JWT令牌
      const token = jwt.sign({
        id: user.id,
        username: user.username,
        role: user.role
      }, JWT_SECRET, {
        expiresIn: JWT_EXPIRES_IN
      });

      return res.status(200).json({
        message: '登录成功',
        token,
        user: {
          id: user.id,
          username: user.username,
          email: user.email,
          role: user.role
        }
      });
    } catch (error) {
      return res.status(500).json({
        message: '登录失败',
        error: error.message
      });
    }
  }

  // 获取当前用户信息
  async getCurrentUser(req, res) {
    try {
      // 从请求对象中获取用户ID（通过身份验证中间件设置）
      const userId = req.user?.id;

      if (!userId) {
        return res.status(401).json({
          message: '请先登录'
        });
      }

      // 获取用户信息
      const user = userModel.getUserById(userId);

      if (!user) {
        return res.status(404).json({
          message: '用户不存在'
        });
      }

      // 返回不包含密码的用户信息
      const { password, ...userWithoutPassword } = user;
      
      return res.status(200).json({
        user: userWithoutPassword
      });
    } catch (error) {
      return res.status(500).json({
        message: '获取用户信息失败',
        error: error.message
      });
    }
  }

  // 更新用户信息
  async updateUser(req, res) {
    try {
      const userId = req.user?.id;
      const { username, email, password } = req.body;

      if (!userId) {
        return res.status(401).json({
          message: '请先登录'
        });
      }

      // 更新用户信息
      const updatedUser = await userModel.updateUser(userId, {
        username,
        email,
        password
      });

      return res.status(200).json({
        message: '用户信息更新成功',
        user: updatedUser
      });
    } catch (error) {
      return res.status(400).json({
        message: error.message
      });
    }
  }

  // 删除用户（需要管理员权限）
  async deleteUser(req, res) {
    try {
      const { id } = req.params;
      const currentUserId = req.user?.id;
      const currentUserRole = req.user?.role;

      if (!currentUserId) {
        return res.status(401).json({
          message: '请先登录'
        });
      }

      // 只有管理员可以删除用户，或者用户可以删除自己
      if (currentUserRole !== 'admin' && parseInt(id) !== currentUserId) {
        return res.status(403).json({
          message: '权限不足'
        });
      }

      // 不允许用户删除自己（如果是普通用户）
      if (currentUserRole !== 'admin' && parseInt(id) === currentUserId) {
        return res.status(403).json({
          message: '普通用户不允许删除自己的账号'
        });
      }

      // 删除用户
      const deletedUser = userModel.deleteUser(parseInt(id));

      return res.status(200).json({
        message: '用户删除成功',
        user: deletedUser
      });
    } catch (error) {
      return res.status(400).json({
        message: error.message
      });
    }
  }

  // 获取所有用户（需要管理员权限）
  async getAllUsers(req, res) {
    try {
      const userRole = req.user?.role;

      if (!userRole || userRole !== 'admin') {
        return res.status(403).json({
          message: '权限不足'
        });
      }

      // 获取所有用户
      const users = userModel.getAllUsers();

      // 返回不包含密码的用户信息
      const usersWithoutPassword = users.map(user => {
        const { password, ...userInfo } = user;
        return userInfo;
      });

      return res.status(200).json({
        users: usersWithoutPassword
      });
    } catch (error) {
      return res.status(500).json({
        message: '获取用户列表失败',
        error: error.message
      });
    }
  }
}

// 导出用户控制器实例
module.exports = new UserController();